package nextfm.bean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.component.UIParameter;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import nextfm.dao.DAOAlbum;
import nextfm.dao.DAOArtista;
import nextfm.model.Album;
import nextfm.model.Artista;

public class AlbumBean {

	DAOAlbum daoAlbum = new DAOAlbum();
	DAOArtista daoArtista = new DAOArtista();
	int id;
	int ano;
	String imagem;
	String nome;
	List<SelectItem> artistas = new ArrayList<SelectItem>();
	int idArtistaSelecionado;
	Album albumSelecionado;
	List<Album> albuns = daoAlbum.findAll();
	int scrollerPage = 1;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
	
	public int getAno() {
		return ano;
	}

	public void setAno(int ano) {
		this.ano = ano;
	}

	public String getImagem() {
		return imagem;
	}

	public void setImagem(String imagem) {
		this.imagem = imagem;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public Album getAlbumSelecionado() {
		return albumSelecionado;
	}

	public void setAlbumSelecionado(Album albumSelecionado) {
		this.albumSelecionado = albumSelecionado;
	}

	public List<SelectItem> getArtistas() {
		List<Artista> todosArtistas = daoArtista.findAll();
		
		if (artistas.size() == 0) { 
	
			for (Artista artista : todosArtistas) {
				artistas.add(new SelectItem(Integer.toString(artista.getId()), artista.getNome()));
			}
		
		}
		return artistas;
	}

	public void setArtistas(List<SelectItem> artistas) {
		this.artistas = artistas;
	}

	public int getIdArtistaSelecionado() {
		return idArtistaSelecionado;
	}

	public void setIdArtistaSelecionado(int idArtistaSelecionado) {
		this.idArtistaSelecionado = idArtistaSelecionado;
	}
	
	public List<Album> getAlbuns() {
		return albuns;
	}

	public void setAlbuns(List<Album> albuns) {
		this.albuns = albuns;
	}

	public int getScrollerPage() {
		return scrollerPage;
	}

	public void setScrollerPage(int scrollerPage) {
		this.scrollerPage = scrollerPage;
	}

	public String remover() {
		try {
			System.out.println("Removendo álbum de id" + getId());
			Album album = daoAlbum.find(getId());
			daoAlbum.begin();
			daoAlbum.remove(album);
			daoAlbum.commit();
			return "success";
		}
		
		catch (Exception e) {
			e.printStackTrace();
			return "failure";
		}
	}
	
	public String editar() {

		try {
			Album album = daoAlbum.find(getId());
			album.setNome(getNome());
			album.setAno(getAno());
			album.setImagem(getImagem());
			Artista artista = daoArtista.find(idArtistaSelecionado);
			album.setArtista(artista);
			System.out.println("Editando álbum de id " + getId());
			daoAlbum.begin();
			daoAlbum.merge(album);
			daoAlbum.commit();
			if (!artista.getAlbuns().contains(album)) {
				artista.getAlbuns().add(album);
			}
			daoArtista.begin();
			daoArtista.merge(artista);
			daoArtista.commit();
			return "success";
		}

		catch (Exception e) {
			e.printStackTrace();
			return "failure";
		}

	}
	
	public String cadastrar() {
		try {
			System.out.println("Adicionando album " + getNome());
			Album album = new Album(getAno(), getNome(), getImagem());
			Artista artista = daoArtista.find(getIdArtistaSelecionado());
			artista.getAlbuns().add(album);
			album.setArtista(artista);
			daoAlbum.begin();
			daoAlbum.persist(album);
			daoArtista.merge(artista);
			daoAlbum.commit();
			return "success";
		}
		
		catch (Exception e) {
			e.printStackTrace();
			return "failure";
		}
	}
	
	public void selecionarAlbum(ActionEvent evento){  
		UIParameter component = (UIParameter) evento.getComponent().findComponent("codigoEdicao");  
		int codigo = Integer.parseInt(component.getValue().toString());   
		setAlbumSelecionado(daoAlbum.find(codigo));
		setAno(albumSelecionado.getAno());
		setImagem(albumSelecionado.getImagem());
		setNome(albumSelecionado.getNome());
		setIdArtistaSelecionado(albumSelecionado.getArtista().getId());
		setId(codigo);
	}
}
